Many computer systems include various hardware devices for providing functionality to the computer system. For example, a computer system may include one or more network cards to allow the computer to access a network, such as the Internet or the World Wide Web, a sound card to enable the computer to produce sound output to speakers, and a video card to allow visual images to be displayed on a monitor. Most computer hardware devices are associated with a driver (i.e., device driver), which is software that translates information coming to/from the device to allow various computer programs executing on the computer to interact with the device.
A device driver simplifies programming by acting as a translator between a device and the applications or operating systems that use it. For example, high-level code for an application can be written independently of the specific hardware device it may control. Each version of a device, such as a sound card, may require its own specialized commands. In contrast, most applications access devices (such as playing a sound file through speakers on a computer) by using high-level, generic commands. The driver accepts these generic commands and converts them into the low-level commands required by the device.
These commands are sometimes represented as programming objects, called “OIDs.” An interface protocol, such as NDIS, has numerous predefined OIDs and a computer operating system that supports an NDIS interface routes the predefined OIDs to device drivers connected to the computer through an NDIS interface. In some instances, independent hardware vendors (IHVs) may develop devices with drivers that can perform functions not represented by predefined OIDs. For these devices, one or more custom, or private, OIDs may be defined. An operating system may route these private OIDs to device drivers similar to standard OIDs, providing a mechanism for software components on the computer to invoke the additional functions of the device.